#include "dialog.h"
#include "ui_dialog.h"
#include "form.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    this->setWindowTitle("登录页面");
    QIcon icon(":/6.png");
    this->setWindowIcon(icon);
    this->resize(1200,800);
}

Dialog::~Dialog()
{
    delete ui;
}

//用户验证函数,登陆时使用
QMap<QString,QVariant> Dialog::authentical(const QString& username,const QString& password)
{
    QMap<QString,QVariant> result;
    result["sucess"]=false;

    if(username.isEmpty()||password.isEmpty())
    {
        result["error"]="用户名或密码不能为空";
        return result;
    }

    QSqlQuery query(db);
    query.prepare("SELECT UserID, Password, Role FROM [User] WHERE Username = :username");
    query.bindValue(":username",username);

    if(!query.exec())
    {
        result["error"]="数据库查询失败： "+query.lastError().text();
        return result;
    }
    if(!query.next())
    {
        result["error"]="用户名不存在";
        return result;
    }
    result["success"] = true;
    result["userID"] = query.value("UserID").toInt();
    result["role"] = query.value("Role").toString();
    return result;
}

//登录操作——要关联到数据库
void Dialog::on_pushButton_clicked()
{
    //获取到用户名
    QString username=ui->lineEdit->text();
    //获取输入的密码
    QString pwd=ui->lineEdit_2->text();

    //如果没有输入内容，无法进入下一个界面
    if(username==nullptr||pwd==nullptr)
        return;

    //打印信息
    QMessageBox msgBox;
    //对用户身份进行验证
    auto result=authentical(username,pwd);
    if(!result["success"].toBool())
    {
        //登录失败
        msgBox.setWindowTitle("登录失败");
        msgBox.setText("期待您的下次到来");
        msgBox.setStyleSheet("QMessage { min-width:400px;min-height:200px;}");
        QPixmap pixmap(":/ku.png");
        msgBox.setIconPixmap(pixmap);
        msgBox.exec();
        return;
    }


    //登录成功
    int userID=result["userID"].toInt();
    QString role=result["role"].toString();

    msgBox.setWindowTitle("欢迎"+username);
    msgBox.setStyleSheet("QMessage { min-width:400px;min-height:200px;}");
    QPixmap pixmap(":/wa.png");
    msgBox.setIconPixmap(pixmap);
    msgBox.exec();
    accept();//关闭窗口


    //给用户返回操作界面
    Form* form=new Form(nullptr,userID);
    form->show();

    //关闭当前窗口
    //操作界面称为当前的主窗口
    this->close();
}

//注册，向数据库中插入一个用户信息
void Dialog::on_pushButton_register_clicked()
{
    //获取到用户名
    QString username=ui->lineEdit->text();
    //获取输入的密码
    QString pwd=ui->lineEdit_2->text();

    //如果没有输入内容，无法进入下一个界面
    // 非空检查
     if(username.isEmpty() || pwd.isEmpty()){
         QMessageBox::warning(this, "输入错误", "所有字段必须填写！");
         return;
     }
     QSqlQuery query(db);
     query.prepare(
                 "INSERT INTO [User] (Username, Password)"
                  "VALUES (:username, :password)");
     query.bindValue(":username",username);
     query.bindValue(":password",pwd);

     //执行插入
     if(!query.exec())
     {
         QString error=query.lastError().text();

         //处理唯一性约束错误
         if(error.contains("UNIQUE KEY"))
         {
             if(error.contains("Username"))
             {
                 QMessageBox::warning(this,"注册失败","用户名已存在!!!");
             }
             else
                 QMessageBox::critical(this,"数据库错误","注册失败："+error);
         }
         return;
     }

//     QMessageBox::information(this,"注册成功","请重新登录!!!");
     QMessageBox msgBox;
     msgBox.setText("注册成功，请重新登录!!!");
     msgBox.setStyleSheet("QMessage { min-width:400px;min-height:200px;}");
     msgBox.exec();
}
